home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / networking / pgpuam / sources / tpgpuamprefs.cp < prev    next >
Encoding:
Text File  |  2000-06-23  |  9.7 KB  |  328 lines

  1. //    TPGPUAMPrefs.cp - Preference Object  
  2. // 
  3. // Apple Macintosh Developer Technical Support
  4. // Written by:  Vinnie Moscaritolo
  5. //
  6. //  Copyright (work in progress)  Apple Computer, Inc All rights reserved.
  7. //
  8. // You may incorporate this sample code into your applications without
  9. // restriction, though the sample code has been provided "AS IS" and the
  10. // responsibility for its operation is 100% yours.  However, what you are
  11. // not permitted to do is to redistribute the source as "DSC Sample Code"
  12. // after having made changes. If you're going to re-distribute the source,
  13. // we require that you make it clear in the source that the code was
  14. // descended from Apple Sample Code, but that you've made changes.
  15. // 
  16.  
  17. #include <PLStringFuncs.h>
  18. #include <string.h>
  19. #include <Files.h>
  20.  
  21. #include "TPGPUAMPrefs.h"
  22. #include "TMacException.h"
  23.  
  24. //------------------------------------------------------------------------------------
  25. #pragma mark Local-Prototypes
  26. //------------------------------------------------------------------------------------
  27. static OSErr get_prefs_name (StringPtr prefName);
  28.  
  29. //------------------------------------------------------------------------------------
  30. #pragma mark Local-Defines
  31. //------------------------------------------------------------------------------------
  32. #define kPrefsNameStrID     128         /* name of prefs file */
  33.  
  34.  
  35. //#define kPrefFolderName        "\pPretty Good Preferences"            /* name of Pref folder */
  36. #define kPrefFolderName            "\pPretty Mediocre Preferences"        /* name of Pref folder */
  37. #define  kPrefsResourceName     "\pPGPuam Prefs"
  38.  
  39. //------------------------------------------------------------------------------------
  40. #pragma mark -
  41.  
  42.  
  43. // ---------------------------------------------------------------------------
  44. static OSErr get_prefs_name (StringPtr prefName)
  45. // ---------------------------------------------------------------------------
  46. //
  47. // get the name of the preferences file from a resource in the application
  48. // 
  49. //
  50. {
  51.     StringHandle prefStrHandle;
  52.     OSErr ErrNo = noErr;
  53.     
  54.     prefStrHandle = GetString(kPrefsNameStrID);
  55.     if (prefStrHandle != nil) 
  56.         BlockMove(*prefStrHandle, prefName, (Size) (**prefStrHandle) + 1);
  57.     else ErrNo = resNotFound;
  58.     
  59.     return ErrNo;
  60. }
  61.  
  62. // ---------------------------------------------------------------------------
  63. OSErr TPGPUAMPrefs::GetPrefSpec( FSSpec *fss )  
  64. // ---------------------------------------------------------------------------
  65. //  
  66.     Str255         prefsNameStr;
  67.     Str255         prefsFolderStr;
  68.     FSSpec         prefsFSS;
  69.     CInfoPBRec    cpb;
  70.     OSErr        err = noErr;
  71.  
  72.     short         prefsVRefNum;
  73.     long         prefsDirID;
  74.     
  75. // get the name of the prefs file 
  76.     ThrowIfMacErr( get_prefs_name(prefsNameStr));
  77.  
  78. // find the pref folder
  79.     ThrowIfMacErr( FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &prefsFSS.vRefNum, &prefsFSS.parID ));
  80.  
  81. // look for subfolder
  82.      prefsVRefNum = prefsFSS.vRefNum;
  83.     PLstrcpy(prefsFSS.name, kPrefFolderName);
  84.         
  85.     memset(&cpb, 0, sizeof cpb);
  86.     cpb.hFileInfo.ioVRefNum = prefsFSS.vRefNum;
  87.     cpb.hFileInfo.ioDirID     = prefsFSS.parID;
  88.     cpb.hFileInfo.ioNamePtr = prefsFSS.name;
  89.             
  90.     if (PBGetCatInfoSync( &cpb ) == noErr)
  91.     {
  92.         if( (cpb.hFileInfo.ioFlAttrib & ioDirMask ) != 0 )
  93.             {
  94.                 prefsDirID = cpb.dirInfo.ioDrDirID;
  95.             }
  96.             else
  97.             {
  98.                 return (dupFNErr);    // "Pretty Good Preferences is a file!"     
  99.             }
  100.     }
  101.     else
  102.     {
  103.             ThrowIfMacErr( FSpDirCreate( &prefsFSS, smSystemScript, &prefsDirID ));
  104.     }
  105.                     
  106.                 
  107.     // make a file spec for the prefs file 
  108.     err = FSMakeFSSpec(prefsVRefNum, prefsDirID, prefsNameStr, fss);
  109.     return  ( err );
  110. }
  111.  
  112.  
  113. #define kFinderMessageStrID -16397     /* ID of STR for default finder message */
  114. #define kStrType 'STR '
  115.  
  116.  
  117. // ---------------------------------------------------------------------------
  118. OSErr TPGPUAMPrefs::CreatePrefFile(FSSpec *fss)   
  119. // ---------------------------------------------------------------------------
  120. //  
  121. // write pref file    
  122.  
  123.     short     prefsResRefNum;
  124.     Handle     versHandle;
  125.     Handle     finderMessageHandle;
  126.     OSErr     ErrNo = noErr;
  127.  
  128.     FSpCreateResFile(fss, '????' ,kPrefsFileType ,smSystemScript);
  129.     if(!(ErrNo = ResError())) 
  130.     {
  131.         prefsResRefNum = FSpOpenResFile(fss, fsWrPerm);
  132.  
  133.         /* add the message to be displayed if the user tries
  134.            to open the prefs file in the Finder (but don't add it
  135.            if it's already in the preferences file) */
  136.            
  137.         finderMessageHandle = (Handle) GetString(kFinderMessageStrID);
  138.         if (finderMessageHandle != nil &&
  139.             HomeResFile((Handle) finderMessageHandle) != prefsResRefNum) {
  140.         
  141.             // copy the resource into the prefs file 
  142.             DetachResource(finderMessageHandle);
  143.             AddResource(finderMessageHandle, kStrType, kFinderMessageStrID,"\pFinder message");
  144.                 
  145.             // if AddResource failed, dispose of the handle
  146.             ErrNo = ResError();
  147.             if (ErrNo != noErr) DisposeHandle(finderMessageHandle);
  148.             }
  149.                        
  150.         versHandle = (Handle) GetResource('vers', 1);
  151.         if (versHandle != nil &&
  152.             HomeResFile((Handle) versHandle) != prefsResRefNum) 
  153.             {
  154.             // copy the resource into the prefs file 
  155.             DetachResource(versHandle);
  156.             AddResource(versHandle, 'vers', 1, nil);
  157.                 
  158.             // if AddResource failed, dispose of the handle
  159.             ErrNo = ResError();
  160.             if (ErrNo != noErr) DisposeHandle(versHandle);
  161.             }
  162.  
  163.         versHandle = (Handle) GetResource('vers', 2);
  164.         if (versHandle != nil &&
  165.             HomeResFile((Handle) versHandle) != prefsResRefNum) 
  166.             {
  167.             // copy the resource into the prefs file 
  168.             DetachResource(versHandle);
  169.             AddResource(versHandle, 'vers', 2, nil);
  170.                 
  171.             // if AddResource failed, dispose of the handle
  172.             ErrNo = ResError();
  173.             if (ErrNo != noErr) DisposeHandle(versHandle);
  174.             }
  175.         
  176.         // update and close the preference resource file 
  177.         CloseResFile(prefsResRefNum);    
  178.     }
  179.     return ErrNo;
  180. }
  181.  
  182.  
  183. // ---------------------------------------------------------------------------
  184. void TPGPUAMPrefs::Finalize()   
  185. // ---------------------------------------------------------------------------
  186. //  
  187. {
  188.     if(fDirty)
  189.     {
  190.         Set( 'disl', 0, sizeof( Boolean), &fDisclosureState);
  191.         Set( 'cach', 0, sizeof( Boolean), &fCachePassPhrase);
  192.         Set( 'ctim', 0, sizeof( SInt16),  &fCachePassPhraseTimeLimit);
  193.         Set( 'asrv', 0, sizeof( Boolean), &fAuthenticateServer);
  194.         Set( 'opt1', 0, sizeof( Boolean), &fOption1);
  195.         Set( 'opt2', 0, sizeof( Boolean), &fOption2);
  196.         Write();
  197.     }
  198.         
  199.  }
  200.  
  201. // ---------------------------------------------------------------------------
  202. void TPGPUAMPrefs::Initialize()   
  203. // ---------------------------------------------------------------------------
  204. //  
  205. {
  206.     Read(); 
  207.     if(  Get('disl',0, 0, &fDisclosureState) != noErr) fDisclosureState = false;
  208.     if(  Get('cach',0, 0, &fCachePassPhrase) != noErr) fCachePassPhrase = false;
  209.     if(  Get('ctim',0, 0, &fCachePassPhraseTimeLimit) != noErr) fCachePassPhraseTimeLimit = 0;
  210.     if(  Get('asrv',0, 0, &fAuthenticateServer) != noErr) fAuthenticateServer = true;
  211.     if(  Get('opt1',0, 0, &fOption1) != noErr) fOption1 = true;
  212.     if(  Get('opt2',0, 0, &fOption2) != noErr) fOption2 = true;
  213. }
  214.  
  215.  
  216. // ---------------------------------------------------------------------------
  217. Boolean TPGPUAMPrefs::GetDisclosureState()   
  218. // ---------------------------------------------------------------------------
  219. //  
  220. {
  221.     return fDisclosureState;
  222. }
  223.  
  224. // ---------------------------------------------------------------------------
  225. void TPGPUAMPrefs::SetDisclosureState(Boolean flag)   
  226. // ---------------------------------------------------------------------------
  227. //  
  228. {
  229.     fDisclosureState = flag ;
  230.     fDirty= true;
  231. }
  232.  
  233.  
  234. // ---------------------------------------------------------------------------
  235. Boolean TPGPUAMPrefs::GetCachePassPhrase()   
  236. // ---------------------------------------------------------------------------
  237. //  
  238. {
  239.     return fCachePassPhrase;
  240. }
  241.  
  242. // ---------------------------------------------------------------------------
  243. void TPGPUAMPrefs::SetCachePassPhrase(Boolean flag)   
  244. // ---------------------------------------------------------------------------
  245. //  
  246. {
  247.     fCachePassPhrase = flag ;
  248.     fDirty= true;
  249. }
  250.  
  251.  
  252. // ---------------------------------------------------------------------------
  253. Boolean TPGPUAMPrefs::GetAuthenticateServer()   
  254. // ---------------------------------------------------------------------------
  255. //  
  256. {
  257.     return fAuthenticateServer;
  258. }
  259.  
  260. // ---------------------------------------------------------------------------
  261. void TPGPUAMPrefs::SetAuthenticateServer(Boolean flag)   
  262. // ---------------------------------------------------------------------------
  263. //  
  264. {
  265.     fAuthenticateServer = flag ;
  266.     fDirty= true;
  267. }
  268.  
  269.  
  270. // ---------------------------------------------------------------------------
  271. Boolean TPGPUAMPrefs::GetOption1()   
  272. // ---------------------------------------------------------------------------
  273. //  
  274. {
  275.     return fOption1;
  276. }
  277.  
  278. // ---------------------------------------------------------------------------
  279. void TPGPUAMPrefs::SetOption1(Boolean flag)   
  280. // ---------------------------------------------------------------------------
  281. //  
  282. {
  283.     fOption1 = flag ;
  284.     fDirty= true;
  285. }
  286.  
  287. // ---------------------------------------------------------------------------
  288. Boolean TPGPUAMPrefs::GetOption2()   
  289. // ---------------------------------------------------------------------------
  290. //  
  291. {
  292.     return fOption2;
  293. }
  294.  
  295. // ---------------------------------------------------------------------------
  296. void TPGPUAMPrefs::SetOption2(Boolean flag)   
  297. // ---------------------------------------------------------------------------
  298. //  
  299. {
  300.     fOption2 = flag ;
  301.     fDirty= true;
  302. }
  303.  
  304.  
  305.  
  306.  
  307. // ---------------------------------------------------------------------------
  308. SInt16 TPGPUAMPrefs::GetCachePassPhraseTimeLimit()   
  309. // ---------------------------------------------------------------------------
  310. //  
  311. {
  312.     return fCachePassPhraseTimeLimit;
  313. }
  314.  
  315. // ---------------------------------------------------------------------------
  316. void TPGPUAMPrefs::SetCachePassPhraseTimeLimit(SInt16 value)   
  317. // ---------------------------------------------------------------------------
  318. //  
  319. {
  320.     fCachePassPhraseTimeLimit = value ;
  321.     fDirty= true;
  322. }
  323.  
  324.  
  325.  
  326.